home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / net / netHppiInt.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  10KB  |  260 lines

  1. /*
  2.  * netHppiInt.h --
  3.  *
  4.  *    Definitions for the Thinking Machines HPPI boards.  The Ultra
  5.  *    include files are also needed, as many of the data structures
  6.  *    are the same.  This is an "additional" file.  Eventually,
  7.  *    there will be a device-independent set of files and a device-
  8.  *    dependent file for the VME and TMC Ultranet connections.
  9.  *
  10.  * Copyright 1990 Regents of the University of California
  11.  * Permission to use, copy, modify, and distribute this
  12.  * software and its documentation for any purpose and without
  13.  * fee is hereby granted, provided that the above copyright
  14.  * notice appear in all copies.  The University of California
  15.  * makes no representations about the suitability of this
  16.  * software for any purpose.  It is provided "as is" without
  17.  * express or implied warranty.
  18.  *
  19.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/net/netHppiInt.h,v 1.3 92/10/26 12:16:44 elm Exp $ SPRITE (Berkeley)
  20.  */
  21.  
  22. #ifndef _NETHPPIINT
  23. #define _NETHPPIINT
  24.  
  25. #include <dev/hppi.h>
  26. #include <netHppi.h>
  27.  
  28. #define    NET_HPPI_STATUS_CONN_REQ    13
  29.  
  30. /*
  31.  *    These are the hardware registers for the HPPI-S board.
  32.  */
  33. typedef struct NetHppiSrcReg {
  34.     volatile uint32 config;    /* configuration register */
  35.     volatile uint32 inputFifo;    /* data input fifo */
  36.     volatile uint32 outputFifo;    /* data output fifo */
  37.     volatile uint32 status;    /* status and interrupt bits */
  38.     volatile uint32 reset;    /* poke this register to reset */
  39. } NetHppiSrcReg;
  40.  
  41. typedef struct NetHppiDestReg {
  42.     volatile uint32 config;
  43.     volatile uint32 inputFifo;
  44.     volatile uint32 outputFifo;
  45.     volatile uint32 status;
  46.     volatile uint32 reset;
  47.     volatile uint32 command;
  48.     volatile uint32 commandData;
  49.     volatile uint32 response;
  50.     volatile uint32 responseData;
  51. } NetHppiDestReg;
  52.  
  53. typedef struct NetHppiIopReg {
  54.     volatile uint32 registers[10];
  55. } NetHppiIopReg;
  56.  
  57. /*
  58.  * Expand this later.
  59.  */
  60. typedef struct Net_HppiStats {
  61.     int foo;
  62. } Net_HppiStats;
  63.  
  64.  
  65. #define NET_HPPI_MAX_ERROR_INFO        256
  66. #define NET_HPPI_ROM_MAX_REPLY        4096
  67. #define    NET_HPPI_MAX_CONNECTIONS    16
  68. #define    NET_HPPI_MAX_TAGS        16    /* increase later! */
  69.  
  70. typedef struct NetHppiConnState {
  71.     uint16        xrbRef;
  72.     unsigned int    flags;
  73.     int            numOutstandingRecv;
  74.     List_Links        recvHdr;    /* list of outstanding receives */
  75.     int            numOutstandingSend;
  76.     List_Links        sendHdr;    /* list of outstanding sends */
  77.     uint32        tag;        /* use this as tag for all cmds */
  78.     Net_HppiConnection*    userConnInfo;
  79.     struct NetHppiState* statePtr;
  80. } NetHppiConnState;
  81.  
  82. typedef struct NetHppiState {
  83.     int magic;                /* for debugging purposes */
  84.     int flags;                /* see below */
  85.     NetHppiSrcReg    *hppisReg;    /* ptr to source board registers */
  86.     NetHppiDestReg    *hppidReg;    /* ptr to dest board registers */
  87.     NetHppiIopReg    *iopReg;    /* ptr to IOP registers */
  88.     Address        firstToHostVME;    /* VMEaddr of toHost XRB queue */
  89.     Address        firstToAdapterVME; /* VMEaddr of toAdapter XRB queue */
  90.     struct NetUltraXRB    *firstToHostPtr;  /* First XRB in queue to host. */
  91.     struct NetUltraXRB    *nextToHostPtr;   /* Next XRB to be filled by
  92.                        * the adapter. */
  93.     struct NetUltraXRB    *lastToHostPtr;      /* Last XRB in queue to host. */
  94.     struct NetUltraXRB    *firstToAdapterPtr; /* First XRB in queue to adapter */
  95.     struct NetUltraXRB    *nextToAdapterPtr;  /* Next XRB to be filled by host */
  96.     struct NetUltraXRB    *lastToAdapterPtr;  /* Last XRB in queue to adapter.*/
  97.     int            adapterVersion;    /* Version of adapter software. */
  98.     int            priority;    /* Interrupt priority. */
  99.     int            vector;        /* Interrupt vector. */
  100.     int            requestLevel;    /* VME bus request level. */
  101.     unsigned char    maxBytesPower;    /* log base 2 of maximum bytes/pkt */
  102.     int            addressSpace;    /* Address space for queues and
  103.                      * buffers. */
  104.     int            maxReadPending;    /* Maximum pending datagram
  105.                      * reads on the interface. */
  106.     int            numReadPending;    /* Number of pending reads. */
  107.     int            readBufferSize;    /* Size of pending read buffers. */
  108.     int            maxWritePending; /* Maximum pending datagram writes.*/
  109.     int            numWritePending; /* Number of pending writes. */
  110.     char        curTsap[4];    /* current TSAP default value */
  111.     Address        buffersDVMA;    /* DVMA buffers for pending reads
  112.                      * and writes. */
  113.     Address        buffers;    /* Address of DVMA buffers in kernel
  114.                      * address space. */
  115.     int            bufferSize;    /* Size of a DVMA buffer. */
  116.     int            numBuffers;    /* Number of DVMA buffers. */
  117.     List_Links        freeBufferListHdr; /* List of free DVMA buffers*/
  118.     List_Links        *freeBufferList; /* Ptr to list of free DVMA
  119.                       * buffers*/
  120.     Sync_Condition    bufferAvail; /* Condition to wait for a free
  121.                       * DVMA buffer. */
  122.     Sync_Condition    toAdapterAvail; /* Condition to wait for an XRB to
  123.                      * the adapter to become available. */
  124.     Boolean        queuesInit;    /* TRUE => XRB queues have been 
  125.                      * allocated. */
  126.     List_Links        pendingXRBInfoListHdr; /* List of info about pending 
  127.                         * XRBs.*/
  128.     List_Links        *pendingXRBInfoList;   /* Pointer to list of info about
  129.                         * pending XRBs. */
  130.     List_Links        freeXRBInfoListHdr;/* List of free XRB info 
  131.                         * structures. */
  132.     List_Links        *freeXRBInfoList;  /* Pointer to list of info about
  133.                         * pending XRBs. */
  134.     Net_Interface    *interPtr;       /* Interface structure associated
  135.                         * with this board set. */
  136.     int            boardFlags;    /* flags passed to boards */
  137.     NetHppiConnState    connection[NET_HPPI_MAX_CONNECTIONS];
  138.     NetUltraTraceInfo    *tracePtr;
  139.     NetUltraTraceInfo    traceBuffer[TRACE_SIZE];
  140.     NetUltraXRBInfo    *tagToXRBInfo[32];
  141.     int            srcErrorBuffer[NET_HPPI_MAX_ERROR_INFO];
  142.     int            dstErrorBuffer[NET_HPPI_MAX_ERROR_INFO];
  143.     int            traceSequence;
  144.     int            curSgTag;
  145.     char        tags[NET_HPPI_MAX_TAGS];
  146.     Net_UltraStats    stats;
  147.     void        (*outputCallback)();
  148.     ClientData        outputClientData;
  149.     int            hppiNum;
  150. } NetHppiState;
  151.  
  152. typedef struct NetHppiSGElement {
  153.     Address    addr;
  154.     int        size;
  155. } NetHppiSGElement;
  156.  
  157. #define    NET_HPPI_STATE_MAGIC    0x29495969
  158.  
  159. /*
  160.  * flags for use in flags field of NetHppiState
  161.  */
  162. #define    NET_HPPI_STATE_EXIST         0x1    /* board set exists */
  163. #define    NET_HPPI_STATE_NORMAL        0x2    /* boards in normal state */
  164. #define NET_HPPI_STATE_START        0x4    /* adapter started */
  165. #define NET_HPPI_STATE_ECHO        0x10    /* boards echoing packets */
  166. #define NET_HPPI_STATE_SINK        0x20    /* boards sinking packets */
  167. #define NET_HPPI_STATE_STATS        0x40    /* collect statistics */
  168. #define NET_HPPI_STATE_DSND_TEST    0x80
  169. #define    NET_HPPI_STATE_SRC_EPROM    0x100    /* src board running EPROM */
  170. #define NET_HPPI_STATE_DST_EPROM    0x200    /* dst board running EPROM */
  171. #define NET_HPPI_STATE_NOT_SETUP    0x400    /* boards not set up */
  172. #define NET_HPPI_STATE_SRC_ERROR    0x1000    /* src board error occurred */
  173. #define NET_HPPI_STATE_DST_ERROR    0x2000    /* dest board error occurred */
  174. #define    NET_HPPI_STATE_IOP_OUTPUT_TEST    0x10000
  175. #define NET_HPPI_OWN_SRC_FIFO        0x10000    /* server owns HPPI-S FIFO */
  176.  
  177. #define    NET_HPPI_CONN_STATE_INUSE    0x1
  178. #define    NET_HPPI_CONN_STATE_OPEN    0x2
  179. #define    NET_HPPI_CONN_STATE_LISTEN    0x4
  180. #define    NET_HPPI_CONN_STATE_CONNECTED    0x8
  181.  
  182.  
  183. #define NET_HPPI_RESET_BOARD        0x1    /* reset TMC board */
  184. #define NET_HPPI_RESET_CPU        0x2    /* reset TMC board CPU */
  185.  
  186. #define NET_HPPI_NUM_TO_HOST        4    /* Number of XRBs to host */
  187. #define NET_HPPI_NUM_TO_ADAPTER        4    /* Number of XRBs to HPPI */
  188.  
  189. #define NET_HPPI_PENDING_READS        NET_HPPI_NUM_TO_HOST
  190. #define NET_HPPI_PENDING_WRITES        NET_HPPI_NUM_TO_ADAPTER
  191.  
  192. #define NET_HPPI_DST_CTRL_OFFSET    0xc000    /* offset from base address
  193.                          * of HPPI-D control regs */
  194. #define NET_HPPI_SRC_CTRL_OFFSET    0x8000    /* offset from base address
  195.                          * of HPPI-S control regs */
  196. #define    NET_HPPI_IOP_CTRL_OFFSET    0x6000    /* offset from base address
  197.                          * of IOP control regs */
  198.  
  199. #define NET_HPPI_MAX_INTERFACES        2
  200. #define NET_HPPI_INTERRUPT_PRIORITY    3
  201. #define NET_HPPI_VME_REQUEST_LEVEL    3
  202. #define NET_HPPI_INTERRUPT_VECTOR    0xc9
  203. #define NET_HPPI_CONTROL_REG_ADDR    0xff800000
  204. #define NET_HPPI_DUAL_PORT_RAM        0xff900000
  205. #define NET_HPPI_VME_ADDRESS_SPACE    0
  206. #define NET_HPPI_MAX_BYTES        0x8000
  207. #define NET_HPPI_MIN_BYTES        0x100
  208.  
  209. #define NET_HPPI_RESET_DELAY        100000
  210. #define NET_HPPI_DELAY            30000000 /* 10 seconds, so prints
  211.                           * on the board can finish */
  212.  
  213. /*
  214.  * Flags for call to NetHppiSendCmd
  215.  */
  216. #define    NET_HPPI_SRC_CMD        0x1
  217. #define NET_HPPI_KEEP_SRC_FIFO        0x2
  218. #define    NET_HPPI_DST_CMD        0x4
  219. #define    NET_HPPI_RESET_RESTART        0x10000
  220.  
  221. #define    NET_HPPI_SEND            0x10
  222. #define    NET_HPPI_RECV            0x20
  223.  
  224. #define NET_HPPI_SRC_STATUS_ALIVE_MASK    0x18000000
  225. #define NET_HPPI_SRC_STATUS_ERROR    0x08000000
  226. #define NET_HPPI_DST_STATUS_ALIVE_MASK    0x18000000
  227. #define NET_HPPI_DST_STATUS_ERROR    0x08000000
  228. #define NET_HPPI_SRC_STATUS_INTR    0x3e
  229. #define NET_HPPI_DST_STATUS_INTR    0x7f
  230.  
  231. #define NET_HPPI_INTERRUPT_CONFIG    ((NET_HPPI_VME_REQUEST_LEVEL << 8) | \
  232.                      NET_HPPI_INTERRUPT_VECTOR |    \
  233.                      DEV_HPPI_INTR_ENB_29K |    \
  234.                      DEV_HPPI_INTR_ENB |        \
  235.                      DEV_HPPI_INTR_ROAK)
  236. #define NET_HPPI_BUS_CONFIG        (3 << DEV_HPPI_BUS_REQ_SHIFT)
  237.  
  238. #define NET_HPPI_SRC_CONFIG_VALUE    (NET_HPPI_INTERRUPT_CONFIG)
  239.  
  240. #define NET_HPPI_DST_CONFIG_VALUE    (NET_HPPI_INTERRUPT_CONFIG | \
  241.                      NET_HPPI_BUS_CONFIG)
  242.  
  243. extern ReturnStatus    NetHppiInfo _ARGS_ ((NetHppiState *statePtr));
  244. extern ReturnStatus    NetHppiHardReset _ARGS_((Net_Interface *interPtr));
  245. extern ReturnStatus    NetHppiInit _ARGS_((Net_Interface *interPtr));
  246. extern void        NetHppiIntr _ARGS_((Net_Interface *interPtr,
  247.                         Boolean polling));
  248. extern ReturnStatus    NetHppiIOControl _ARGS_((Net_Interface *interPtr,
  249.                          Fs_IOCParam *ioctlPtr,
  250.                          Fs_IOReply *replyPtr));
  251. extern ReturnStatus    NetHppiReset _ARGS_((Net_Interface *interPtr));
  252. extern void        Net_HppiReset _ARGS_((Net_Interface *interPtr));
  253. extern ReturnStatus    NetHppiOutput _ARGS_((Net_Interface *interPtr,
  254.                   Address hdrPtr,
  255.                   Net_ScatterGather *scatterGatherPtr,
  256.                   int scatterGatherLength, Boolean rpc,
  257.                   ReturnStatus *statusPtr));
  258.  
  259. #endif /* _NETHPPIINT */
  260.